/*
 * Projet Java / UML -- Trombinoscope - Février / Mars 2012
 * Virginie Messe -- William Huber
 */
package mvc_model;

import java.util.ArrayList;
import java.util.Iterator;
import outils.PromotionDAO;

/**
 *
 * @author Virginie Messe
 */
public class Promotion {
        private int idPromotion;
        private String classe;
	private String anneeScolaire;
        private int minAccessLevel;
        private String email;

    /**
     * Constructeur vide, utile pour la classe PromotionDAO
     * 
     */
    public Promotion() {
    }

    public Promotion(int id, String classe, String anneeScolaire, int minAccessLevel, String email) {
        this.idPromotion = id;
        this.classe = classe;
        this.anneeScolaire = anneeScolaire;
        this.minAccessLevel = minAccessLevel;
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getId() {
        return idPromotion;
    }

    public void setId(int id) {
        this.idPromotion = id;
    }

    public String getAnneeScolaire() {
        return anneeScolaire;
    }

    public void setAnneeScolaire(String anneeScolaire) {
        this.anneeScolaire = anneeScolaire;
    }

    public String getClasse() {
        return classe;
    }

    public void setClasse(String classe) {
        this.classe = classe;
    }

    public int getMinAccessLevel() {
        return minAccessLevel;
    }

    public void setMinAccessLevel(int minAccessLevel) {
        this.minAccessLevel = minAccessLevel;
    }

    /**
     * 
     * @param obj L'objet à comparer avec l'objet courant <br/>
     * 
     * requires <br/>
     *      
     * ensures <br/>
     * 
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Promotion other = (Promotion) obj;

        if ((this.classe == null) ? (other.classe != null) : !this.classe.equals(other.classe)) {
            return false;
        }
        if ((this.anneeScolaire == null) ? (other.anneeScolaire != null) : !this.anneeScolaire.equals(other.anneeScolaire)) {
            return false;
        }
        if (this.minAccessLevel != other.minAccessLevel) {
            return false;
        }
        if ((this.email == null) ? (other.email != null) : !this.email.equals(other.email)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 47 * hash + this.idPromotion;
        hash = 47 * hash + (this.classe != null ? this.classe.hashCode() : 0);
        hash = 47 * hash + (this.anneeScolaire != null ? this.anneeScolaire.hashCode() : 0);
        hash = 47 * hash + this.minAccessLevel;
        hash = 47 * hash + (this.email != null ? this.email.hashCode() : 0);
        
        return hash;
    }

    
    // Obtention de la liste des Promotions, sous la forme d'une ArrayList.
    /**
     * 
     * @param <br/>
     * 
     * requires <br/>
     *      
     * ensures <br/>
     * 
     */
    public ArrayList<Promotion> listerPromotions() {
        PromotionDAO pDAO = new PromotionDAO();
        
        return pDAO.listerPromotions();
    }
    
    // Mise en forme du menu déroulant pour l'affichage des promotions
    /**
     * 
     * @param alP la liste des promotions, déjà récupérée <br/>
     * 
     * requires <br/>
     *      
     * ensures <br/>
     * 
     */
    public String getStringMenuDeroulant(ArrayList<Promotion> alP) {
        String result = new String("");
        int cpt = 01;
        if (alP == null) 
        {
            return "";
        }
        else 
        {
            Iterator<Promotion> iter = alP.iterator();
        
            while (iter.hasNext()) {
                Promotion promo_une = iter.next();
                if (cpt == 01) {
                    result += "<option value=\"" + promo_une.getId() + "\" selected=\"selected\">";
                }
                else {
                    result += "<option value=\"" + promo_une.getId() + "\" >";
                }
                // Ajout des liens d'action
                result += "<a href=\"MainServlet?action=afficher_trombi&selected_promo=" 
                        + promo_une.getId()
                        + "\">";
                
                // Ajout de la valeur ( classe + année scolaire )
                result += promo_une.getClasse() 
                    + " " + promo_une.getAnneeScolaire();
                result += "</a>";
                result += "</option> \n";
                cpt++;
            }
        }
        return result;
    }
    
    // Mise en forme du menu déroulant pour l'affichage des promotions
    // --- Version pour le panneau d'administration
    /**
     * 
     * @param alP la liste des promotions, déjà récupérée <br/>
     * 
     * requires <br/>
     *      
     * ensures <br/>
     * 
     */
    public String getAdmStringMenuDeroulant(ArrayList<Promotion> alP) {
        String result = new String("");
        int cpt = 01;
        if (alP == null) 
        {
            return "";
        }
        else 
        {
            Iterator<Promotion> iter = alP.iterator();
        
            while (iter.hasNext()) {
                Promotion promo_une = iter.next();
                if (cpt == 01) {
                    result += "<option value=\"" + promo_une.getId() + "\" selected=\"selected\">";
                }
                else {
                    result += "<option value=\"" + promo_une.getId() + "\" >";
                }
                // Ajout des liens d'action
                result += "<a href=\"MainServlet?action=afficher_admin&selected_promo=" 
                        + promo_une.getId()
                        + "\">";
                
                // Ajout de la valeur ( classe + année scolaire )
                result += promo_une.getClasse() 
                    + " " + promo_une.getAnneeScolaire();
                result += "</a>";
                result += "</option> \n";
                cpt++;
            }
        }
        return result;
    }
    
    // Création / insertion d'une promotion
    /**
     * 
     * @param classe et anneeScolaire : les champs requis. <br/>
     * 
     * requires <br/>
     *      
     * ensures <br/>
     * 
     */
    public void insert(String classe, String anneeScolaire, int stat, String email) 
    {
        Promotion p = new Promotion();
        PromotionDAO pDAO = new PromotionDAO();
         
        p.setClasse(classe);
        p.setAnneeScolaire(anneeScolaire);
        p.setMinAccessLevel(stat);
        p.setEmail(email);
        
        pDAO.create(p);
    }
    
    // Suppression d'une promotion
    /**
     * 
     * @param id l'identifiant de la Promotion que l'on veut supprimer. <br/>
     * 
     * requires <br/>
     *      
     * ensures <br/>
     * 
     */
    public void delete(int  id) 
    {
        PromotionDAO pDAO = new PromotionDAO();
        pDAO.delete(id);
    }
    
    // Mise à jour d'une Promotion
    /**
     * 
     * @param id etc. les champs de la Promotion que l'on veut supprimer. <br/>
     * 
     * requires <br/>
     *      
     * ensures <br/>
     * 
     */
    public void update(int id, String classe, String anneeScolaire, int statut, String email) 
    {
        PromotionDAO pDAO = new PromotionDAO();
        Promotion p = pDAO.find(id);
        
        p.setAnneeScolaire(anneeScolaire);
        p.setClasse(classe);
        p.setMinAccessLevel(statut);
        p.setEmail(email);
        pDAO.update(p);
        
    }
        
        
}
